"""
这个文件重要用放一些重复性很高的代码，这些方法可以在不同的rpk中复用
打开跳转工具并且点击跳转
"""
import logging
import subprocess

import uiautomator2 as u2

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


class BasePage:

    def jump_tool(slef, d, rpk_name, source=None, book_id=None, az=None):
        """
        通过跳转工具跳转到快应用
        默认把跳转工具放在了右下角
        """
        d(resourceId='com.android.systemui:id/center_group').click()
        logging.info("打开跳转工具")
        # d = u2.connect_usb('NZFYY55DEUO7V8D6')
        d.app_stop("com.example.testdp")
        d(description='APK跳转快应用').click()
        d(scrollable=True).scroll.to(textContains=rpk_name)
        d(textContains=rpk_name).click()

        # 获取当前输入框的文本
        current_text = d(resourceId="com.example.testdp:id/deepUrl").get_text()

        # 添加你想追加的文本
        new_text = current_text + source + '&' + 'jpd=' + book_id

        # 设置输入框的文本为新组合文本
        d(resourceId="com.example.testdp:id/deepUrl").set_text(new_text)
        d(resourceId="com.android.systemui:id/back").click()
        d(text='跳转到快应用.').click()

    def agree_privacy(self, d):
        """
        同意隐私弹窗
        """
        wait_timeout: 6.0
        try:
            logging.info("同意隐私弹窗")
            d(text='同意').click()
        except u2.exceptions.UiObjectNotFoundError:
            print("没有隐私弹窗")

    def oppo_clear_cache(self, d):
        """
        oppo手机清除快应用缓存（暂时不考虑没有没有缓存的情况）
        :param d: 链接的手机
        :return:
        """
        logging.info("清除快应用缓存")
        d(resourceId='com.android.systemui:id/center_group').click()
        d(text='软件商店').click()
        # 等待5s
        wait_timeout: 7.0
        logging.info("开始点击 软件  ")
        d.xpath('//*[@content-desc="软件"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]').click()
        # 快应用
        d(resourceId="com.heytap.market:id/category_five").click(timeout=5)
        # 我的
        d.xpath(
            '//android.widget.HorizontalScrollView/android.widget.LinearLayout[1]/android.widget.LinearLayout[4]/android.widget.LinearLayout[1]/android.view.ViewGroup[1]/android.widget.ImageView[1]').click()
        # 缓存管理
        d.xpath(
            '//android.widget.ScrollView/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.view.ViewGroup[base_page]/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.widget.FrameLayout[1]/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.widget.ImageView[1]').click()
        d(text='全选').click()
        # 清理
        d.xpath(
            '//*[@resource-id="com.nearme.instant.platform:id/hybrid_view"]/android.widget.RelativeLayout[1]/android.view.ViewGroup[base_page]/android.widget.FrameLayout[1]').click()
        # 确认
        d.xpath(
            '//*[@resource-id="com.nearme.instant.platform:id/hybrid_view"]/android.widget.RelativeLayout[1]/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.view.ViewGroup[3]/android.view.ViewGroup[3]/android.view.View[1]').click()

    def get_device_numbers(self):
        """
        获取手机的序列号
        :return:序列号
        """
        # 调用adb devices命令
        output = subprocess.check_output(['adb', 'devices']).decode('utf-8')

        # 分割输出结果，去除标题行
        lines = output.split('\n')[1:]

        # 初始化设备序列号列表
        serial_numbers = []

        # 遍历每一行输出，提取序列号
        for line in lines:
            if line.strip():  # 忽略空白行
                serial_number = line.split('\t')[0]
                serial_numbers.append(serial_number)

        return serial_numbers


# 调用jump_tool()


pg1 = BasePage()
phone = u2.connect_usb(pg1.get_device_numbers()[0])
pg1.oppo_clear_cache(phone)
pg1.jump_tool(phone, '思维夺宝', '9483', '9800')
pg1.agree_privacy(phone)
